
import { defineStore } from 'pinia'

/**
 * 旧的数据结构
 * {
 *  "sys-dept": ['name','code'],
 *  "sys-post": ['name']
 * }
 * 新的数据结构
 * 默认情况
 * {
 *  "sys-dept": {
 *   "name": true,
 *   "code": true
 *  }
 * }
 * 当取消code的勾选时
 * {
 *  "sys-dept": {
 *    "name": true,
 *    "code": false
 *  }
 * }
 * 当新增列code1
 * {
 *  "sys-dept": {
 *    "name": true,
 *    "code": false,
 *    "code1": undefined
 *  }
 * }
 * ==> 当列名对应的值为true或undefined（相当于!==false）就是要勾选的值
 */
interface TableState {
  cache: any
}
export const useTableStore = defineStore('app-table', {
  // 推荐使用 完整类型推断的箭头函数
  state: (): TableState => {
    return {
      cache: {}
    }
  },
  actions: {
    /**
     * 设置缓存-单个设置
     * @param key 
     * @param value 例：['name','code']
     */
    setCache(key: any,value: any) {
      if(key) {
        const data = this.cache[key] || {}
        if(Object.keys(data).length) {
          Object.keys(data).forEach((mKey:any)=>{
            if(value?.includes(mKey)) {
              data[mKey] = true
            } else {
              data[mKey] = false
            }
          })
        } else {
          // 没有值的话，全部初始为true
          value?.forEach((mKey: any)=>{
            data[mKey] = true
          })
        }
        this.cache[key] = data
      }
    }
  },
  getters: {
   getCache(): Function {
     return (key:any, allColumnKeys: Array<any>)=>{
      const resKeys: Array<any>=[]
      const data = this.cache[key] || {}
      allColumnKeys?.forEach((key: any) => {
        if(data[key] === true || data[key] === undefined) {
          resKeys.push(key)
        }
        // if(data[key]!==false) {
        //   resKeys.push(key)
        // }
      })
      return resKeys
     }
   }
  },
  persist: {
    storage: localStorage,
    key: "app-table"
  }
})